package pkg.orange.online;

import java.io.File;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
//import android.util.Log;


public class OrangeWidgetProvider extends AppWidgetProvider {
	
	@Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    	 /**
    	 * Aktualizacja widżeta - tworzymy usługę w tle, która się polączy z orange online i zaktualizuje wyniki.
    	 * Może to portwać nawet kilkadziesiąt sekund (serwery Orange).
		 * Koniecznie IntentService a nie service, bo w zwykłą usługę system i tak ubije jak będzie
		 * się wykonywała dłużej niż ok. 20 sekund
		 * 
		 * Wg dokumentacji:
		 * The onUpdate() method will not be called when the App Widget is created 
		 * (the system will not send the ACTION_APPWIDGET_UPDATE broadcast when a 
		 * configuration Activity is launched). It is the responsibility of the
		 * configuration Activity to request an update from the AppWidgetManager
		 * when the App Widget is first created. However, onUpdate() will be called 
		 * for subsequent updates—it is only skipped the first time.
		 * 
		 * W praktyce onUpdate() wywołuje się od razu(tak po prostu..), a po zamknięciu konfiguracji nie :/
		 * Dlatego wykorzystuję zmienną updateReady w SharedPreferences, którą po dokonaniu 
		 * konfiguracji zmieniam na true(klasa OrangeConfigureWidget), a po usunięciu zmieniam z powrotem na false
		 * onDelete (niżej).
		 */
		 for (int i=0; i<appWidgetIds.length; i++) {
			SharedPreferences config = context.getSharedPreferences(OrangeConfigureWidget.PREFS_NAME+Integer.toString(appWidgetIds[i]),0);
			if(!config.getBoolean("updateReady", false)){
				//Log.d("OrangeWidgetProvider", "onUpdate - not ready");
			}
			else{
				//Log.d("OrangeWidgetProvider", "onUpdate - ready, starting service");
				Intent intent = new Intent(context, OrangeUpdateService.class);
				intent.putExtra("appWidgetId", appWidgetIds[i]);
				context.startService(intent);
			}
		 }
    }
	
	/**
	 * Wyczyszczamy opcje użytkownika po usunięciu widżetu.
	 */
	@Override
	public void onDeleted(Context context, int[] appWidgetIds){
		super.onDeleted(context, appWidgetIds);
		SharedPreferences globalCfg = context.getSharedPreferences(OrangeConfigureWidget.PREFS_NAME,0);
		int lastId = globalCfg.getInt("lastId", 0);
		for (int i=0; i<appWidgetIds.length; i++) {
			if(appWidgetIds[i]!=lastId){ //usuwamy stare, nie potrzebne ustawienia
				String prefsName = OrangeConfigureWidget.PREFS_NAME+Integer.toString(appWidgetIds[i]);
				//Log.d("OrangeWidgetProvider","Usuwam ustawienia "+prefsName);
				SharedPreferences config = context.getSharedPreferences(prefsName,0);
		        SharedPreferences.Editor configEditor = config.edit();
		        configEditor.clear();
		        configEditor.commit();
		        File file1 = new File("/data/data/pkg.orange.online/shared_prefs/"+prefsName+".xml");
		        file1.delete();
		        File file2 = new File("/data/data/pkg.orange.online/shared_prefs/"+prefsName+".bak");
		        file2.delete();
			}
		}
		
	}
}